/**************************************************
*
*
  * File Name          : NetAtProcess.c
  * Description        : 本文档包含AT指令驱动网络模块的功能
*
***************//////////////////////////////////////////////


#include "NetAtProcess.h"

tUartRxBufDef *NetBuf;

NetSuccessState NetSuccess = NET_STATE_INIT;

uint16_t AtReturn = 0;
uint16_t AtSendOut = 0;

uint16_t	LinkStart = 0;


void NetRstInit(void)
{
	NET_SET_LINK_OFFLINE;
	AtReturn = 0;
	AtSendOut = 0;
	/*模块初始化，串口通道初始化*/
	HAL_GPIO_WritePin(NET_RST_GPIO_Port,NET_RST_Pin,GPIO_PIN_SET);
	HAL_Delay(75);
	HAL_GPIO_WritePin(NET_RST_GPIO_Port,NET_RST_Pin,GPIO_PIN_RESET);
}

void NetAtInit(void)
{
	NetBuf = &Uart1RxBuf;
	
	NetRstInit();
}

uint16_t AtSendTime = 0;

void NetAtSend(uint8_t *AtBuf,uint16_t	AtBufLen)
{
	UartSend(&huart1,AtBuf,AtBufLen);
	AtSendTime = 1;
}

/*
设备上线会下发上线提醒
内容为ICCID+20字节的ICCID+CSQ+信号强度
*/
void LinkState(void)
{
	if(1 == NetBuf->Start)
	{
		Stop_Tick(TASK_WORK_AT_INIT_WAIT);
		if(NULL != strstr((const char *)NetBuf->Buf, (const char *)ONLINEDATA))
		{//判断设备是否上线
			NetBuf->Start = 0;
			{
				memset(SetDataConfig->NetSet.ICCID,0,22);
				memcpy(&(SetDataConfig->NetSet.ICCID),&(NetBuf->Buf[5]),20);
				if(NULL != strstr((const char *)NetBuf->Buf, (const char *)CSQDATA))
				{
					RunDataConfig->RunCSQ = (NetBuf->Buf[28]-0x30) * 10 + (NetBuf->Buf[29]-0x30);
				}
			}
			LinkStart = 1;
		}
		else if(NULL != strstr((const char *)NetBuf->Buf, (const char *)OFFLINEDATA))
		{//判断设备是否离线
			NetBuf->Start = 0;
			LinkStart = 0;
		}
		else
		{
			NetBuf->Start = 2;
		}
	}
}


void NetAtProcess(void)
{
	LinkState();
	
	if(0 != LinkStart)
	{//3分钟内没有收到数据自动判断为离线
		NET_SET_LINK_ONLINE;
		if(0==tickstart[TASK_WORK_AT_INIT_WAIT].start)
		{
			Start_Tick(TASK_WORK_AT_INIT_WAIT);
		}
		if((tickstart[TASK_WORK_AT_INIT_WAIT].start)&&(tickstart[TASK_WORK_AT_INIT_WAIT].time > 1000 * 60 * 3))
		{//连续3分钟内没有收到数据进行重启模块操作
			Stop_Tick(TASK_WORK_AT_INIT_WAIT);
			LinkStart = 0;
			HAL_GPIO_WritePin(NET_RST_GPIO_Port,NET_RST_Pin,GPIO_PIN_SET);
			HAL_Delay(75);
			HAL_GPIO_WritePin(NET_RST_GPIO_Port,NET_RST_Pin,GPIO_PIN_RESET);
		}
	}
	else 
	{
		Stop_Tick(TASK_WORK_AT_INIT_WAIT);
		NET_SET_LINK_OFFLINE;
	}
}

void	NetProcess(void)
{
	NetAtProcess();
}




/*END FILE*/
